home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 9675 / 9675.xpi / chrome / content / simpletimer-options.js < prev    next >
Encoding:
JavaScript  |  2009-11-23  |  12.4 KB  |  303 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is Simple Timer.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * George Bradt.
  18.  *
  19.  * Portions created by the Initial Developer are Copyright (C) 2009
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  26.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the MPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the MPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37.  
  38. var SimpleTimerOptions = {
  39.     // Show or hide audio files groupbox, 24 hr checkbox.
  40.     // Enable Browse button if Custom audio file selected.
  41.     // Init textboxes with file paths.
  42.  
  43.     onLoadOptions: function() {
  44.         var strbundle = document.getElementById("simtim-strings");
  45.  
  46.         try {
  47.             var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  48.                     getService(Components.interfaces.nsIPrefService).
  49.                     getBranch("extensions.simpletimer@grbradt.org.");
  50.  
  51.             if ( prefs.prefHasUserValue("userWavPath") ) {
  52.                 document.getElementById("simtim-userWavPath").value =
  53.                         prefs.getComplexValue("userWavPath", Components.interfaces.nsILocalFile).path;
  54.             }
  55.             else {
  56.                 document.getElementById("simtim-userWavPath").value = "";
  57.             }
  58.  
  59.             if ( prefs.prefHasUserValue("eventLogPath") ) {
  60.                 document.getElementById("simtim-eventLogPath").value =
  61.                         prefs.getComplexValue("eventLogPath", Components.interfaces.nsILocalFile).path;
  62.             }
  63.             else {
  64.                 document.getElementById("simtim-eventLogPath").value = "";
  65.             }
  66.         }
  67.         catch(e) {
  68.             alert(strbundle.getString("alert.error.get.prefs") +
  69.                   "\n" + e.message);
  70.         }
  71.  
  72.         // Check if user on 12 or 24 hr clock
  73.         var time = new Date().toLocaleTimeString().split(" ");
  74.  
  75.         document.getElementById("simtim-cboxClock24Hr").hidden =
  76.                 ( time.length > 1 ) ? false : true;
  77.         this.onAudioNotifyClick();
  78.  
  79.         if ( document.getElementById("simtim-cboxDialogNotify").checked ) {
  80.             document.getElementById("simtim-tboxRepeatAudio").disabled = false;
  81.             document.getElementById("simtim-tboxRepeatMax").disabled = false;
  82.         }
  83.  
  84.         if ( document.getElementById("simtim-radgrpClockType").selectedIndex === 0 ) {
  85.             document.getElementById("simtim-cboxShowSecs").disabled = false;
  86.             document.getElementById("simtim-cboxClock24Hr").disabled = false;
  87.         }
  88.         else {
  89.             document.getElementById("simtim-cboxShowSecs").disabled = true;
  90.             document.getElementById("simtim-cboxClock24Hr").disabled = true;
  91.         }
  92.  
  93.         if ( document.getElementById("simtim-radgrpAudioFile").selectedIndex === 2 ) {
  94.             document.getElementById("simtim-btnBrowseWav").disabled = false;
  95.         }
  96.  
  97.         if ( document.getElementById("simtim-cboxEventLogging").checked ) {
  98.             document.getElementById("simtim-btnBrowseLogPath").disabled = false;
  99.             document.getElementById("simtim-tboxDeleteLogEntries").disabled = false;
  100.             document.getElementById("simtim-btnResetDefault").disabled = false;
  101.         }
  102.         else {
  103.             document.getElementById("simtim-btnBrowseLogPath").disabled = true;
  104.             document.getElementById("simtim-tboxDeleteLogEntries").disabled = true;
  105.             document.getElementById("simtim-btnResetDefault").disabled = true;
  106.         }
  107.  
  108.         this.setDateFormatLabels();
  109.     },
  110.  
  111.     // Set the menuitem labels for the date format menulist.
  112.  
  113.     setDateFormatLabels: function() {
  114.         var date = new Date();
  115.         var numDate = date.getDate();
  116.  
  117.         document.getElementById("simtim-mitemDate1").label = date.toLocaleFormat("%a");
  118.         document.getElementById("simtim-mitemDate2").label = date.toLocaleFormat("%a  %b %d");
  119.         document.getElementById("simtim-mitemDate3").label = date.toLocaleFormat("%a  %b %d, %Y");
  120.         document.getElementById("simtim-mitemDate4").label = date.toLocaleFormat("%a %m/%d/%y");
  121.         document.getElementById("simtim-mitemDate5").label = date.toLocaleFormat("%a %m/%d/%Y");
  122.         document.getElementById("simtim-mitemDate6").label = date.toLocaleFormat("%a %d/%m/%y");
  123.         document.getElementById("simtim-mitemDate7").label = date.toLocaleFormat("%a %d/%m/%Y");
  124.         document.getElementById("simtim-mitemDate8").label = date.toLocaleFormat("%a %d");
  125.  
  126.         // Bug 459844 - strftime doesn't support "%e" (%d without leading zero) on Windows.
  127.         document.getElementById("simtim-mitemDate9").label = date.toLocaleFormat("%a") + " " +
  128.                 numDate + SimpleTimer.getOrdinalChars(numDate);
  129.  
  130.     },
  131.  
  132.     // Show or hide audio files groupbox.
  133.  
  134.     onAudioNotifyClick: function() {
  135.         document.getElementById("simtim-gboxAudioFiles").hidden =
  136.                  !document.getElementById("simtim-cboxAudioNotify").checked;
  137.         this.onDialogNotifyClick();
  138.     },
  139.  
  140.     // Enable or disable audio repeat, max textboxes.
  141.  
  142.     onDialogNotifyClick: function() {
  143.         if ( document.getElementById("simtim-cboxDialogNotify").checked &&
  144.              document.getElementById("simtim-cboxAudioNotify").checked ) {
  145.             document.getElementById("simtim-tboxRepeatAudio").disabled = false;
  146.             document.getElementById("simtim-tboxRepeatMax").disabled = false;
  147.         }
  148.         else {
  149.             document.getElementById("simtim-tboxRepeatAudio").disabled = true;
  150.             document.getElementById("simtim-tboxRepeatMax").disabled = true;
  151.         }
  152.     },
  153.  
  154.     // Enable or disable custom browsing on radio clicking.
  155.  
  156.     onAudioFileRadioClick: function() {
  157.         // Index of 2 == custom.
  158.         if ( document.getElementById("simtim-radgrpAudioFile").selectedIndex === 2 ) {
  159.             document.getElementById("simtim-btnBrowseWav").disabled = false;
  160.         }
  161.         else {
  162.             document.getElementById("simtim-btnBrowseWav").disabled = true;
  163.         }
  164.     },
  165.  
  166.     // Display the file picker dialog and update the
  167.     // textbox with the path of the file selected.
  168.  
  169.     onBrowseClick: function() {
  170.         var strbundle = document.getElementById("simtim-strings");
  171.         var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  172.                 getService(Components.interfaces.nsIPrefService).
  173.                 getBranch("extensions.simpletimer@grbradt.org.");
  174.         var filePicker = Components.classes["@mozilla.org/filepicker;1"].
  175.                     createInstance(Components.interfaces.nsIFilePicker);
  176.  
  177.         filePicker.init(window,
  178.                         strbundle.getString("title.audio.filepicker"),
  179.                         filePicker.modeOpen);
  180.  
  181.         try {
  182.             // Calling from add-on manager was a problem, so do this again.
  183.             // Check if this browser supports audio object (>= ff 3.5).
  184.             var audioObject = new Audio();
  185.             filePicker.appendFilter("*.ogg *.wav", "*.ogg; *.wav");
  186.         }
  187.         catch(e) {
  188.             filePicker.appendFilter("*.wav", "*.wav");
  189.         }
  190.  
  191.         // Use the nsILocalFile, not path, when possible, to update the pref.
  192.         if ( filePicker.show() === filePicker.returnOK ) {
  193.             document.getElementById("simtim-userWavPath").value = filePicker.file.path;
  194.             prefs.setComplexValue("userWavPath", Components.interfaces.nsILocalFile, filePicker.file);
  195.         }
  196.     },
  197.  
  198.     // Enable or disable event log path browsing.
  199.  
  200.     onEventLoggingClick: function() {
  201.         if ( document.getElementById("simtim-cboxEventLogging").checked ) {
  202.             document.getElementById("simtim-btnBrowseLogPath").disabled = false;
  203.             document.getElementById("simtim-tboxDeleteLogEntries").disabled = false;
  204.             document.getElementById("simtim-btnResetDefault").disabled = false;
  205.         }
  206.         else {
  207.             document.getElementById("simtim-btnBrowseLogPath").disabled = true;
  208.             document.getElementById("simtim-tboxDeleteLogEntries").disabled = true;
  209.             document.getElementById("simtim-btnResetDefault").disabled = true;
  210.         }
  211.     },
  212.  
  213.     // Display the file picker dialog and update the
  214.     // textbox with the path of the log file.
  215.  
  216.     onBrowseLogClick: function() {
  217.         var strbundle = document.getElementById("simtim-strings");
  218.         var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  219.                 getService(Components.interfaces.nsIPrefService).
  220.                 getBranch("extensions.simpletimer@grbradt.org.");
  221.         var file = Components.classes["@mozilla.org/file/local;1"].
  222.                 createInstance(Components.interfaces.nsILocalFile);
  223.         var filePicker = Components.classes["@mozilla.org/filepicker;1"].
  224.                     createInstance(Components.interfaces.nsIFilePicker);
  225.  
  226.         filePicker.init(window,
  227.                         strbundle.getString("title.log.filepicker"),
  228.                         filePicker.modeGetFolder);
  229.  
  230.         if ( filePicker.show() === filePicker.returnOK ) {
  231.             // The filepicker file attribute is a readonly nsILocalFile.
  232.             file.initWithPath(filePicker.file.path);
  233.             file.append("eventLog.txt");
  234.  
  235.             if ( !file.exists() ) {
  236.                 SimpleTimerFileIO.create(file);
  237.             }
  238.  
  239.             document.getElementById("simtim-eventLogPath").value = file.path;
  240.             prefs.setComplexValue("eventLogPath", Components.interfaces.nsILocalFile, file);
  241.         }
  242.     },
  243.  
  244.     // Use the default log file and update the textbox with the path.
  245.  
  246.     onResetDefaultClick: function() {
  247.         var prefs = Components.classes["@mozilla.org/preferences-service;1"].
  248.                 getService(Components.interfaces.nsIPrefService).
  249.                 getBranch("extensions.simpletimer@grbradt.org.");
  250.         var file = SimpleTimerEventLog.createDefaultLogFile();
  251.  
  252.         if ( file ) {
  253.             document.getElementById("simtim-eventLogPath").value = file.path;
  254.             prefs.setComplexValue("eventLogPath", Components.interfaces.nsILocalFile, file);
  255.         }
  256.     },
  257.  
  258.     // Enable or disable "display seconds", "display 24 hr clock".
  259.  
  260.     onClockTypeClick: function() {
  261.         if ( document.getElementById("simtim-radgrpClockType").selectedIndex === 0 ) {
  262.             document.getElementById("simtim-cboxShowSecs").disabled = false;
  263.             document.getElementById("simtim-cboxClock24Hr").disabled = false;
  264.         }
  265.         else {
  266.             document.getElementById("simtim-cboxShowSecs").disabled = true;
  267.             document.getElementById("simtim-cboxClock24Hr").disabled = true;
  268.         }
  269.     },
  270.  
  271.     // Called when user clicks OK on options dialog.
  272.  
  273.     onOKOptions: function() {
  274.         // Can't choose Custom (index == 2) and not set a file.
  275.         // Not called when "browser.preferences.instantApply" is "true",
  276.         // but no harm.
  277.         var strbundle = document.getElementById("simtim-strings");
  278.  
  279.         if ( !document.getElementById("simtim-gboxAudioFiles").hidden &&
  280.              document.getElementById("simtim-radgrpAudioFile").selectedIndex === 2 &&
  281.              document.getElementById("simtim-userWavPath").value === "" ) {
  282.             var strbundle = document.getElementById("simtim-strings");
  283.             alert(strbundle.getString("alert.error.path.empty.line1") +
  284.                   "\n" +
  285.                   strbundle.getString("alert.error.path.empty.line2"));
  286.             return false;
  287.         }
  288.  
  289.         if ( document.getElementById("simtim-cboxEventLogging").checked &&
  290.              document.getElementById("simtim-eventLogPath").value === "" ) {
  291.             alert(strbundle.getString("alert.error.log.path.empty"));
  292.             return false;
  293.         }
  294.  
  295.         return true;
  296.     },
  297.  
  298.     // Debug messages to console.
  299.  
  300.     debug: function (aMsg) {
  301.         setTimeout(function() { throw new Error("[debug] " + aMsg); }, 0);
  302.     }
  303. };